package mylab.usm.api.model.authorization;

import mylab.base.model.LongIdName;
import mylab.commons.api.model.Tree;

import java.util.Collections;
import java.util.List;

/**
 * 系统角色
 */
public interface Role extends LongIdName, Tree<Role> {

    /**
     * 角色容量
     * 角色容量: 当capacity != null时生效，限制该角色下用户数
     * 基数约束：参见 RBAC2 模型概念
     *
     * @return 角色容量
     */
    default Integer getCapacity() {
        return null;
    }

    /**
     * 先决条件角色
     * 先决条件角色: 即用户想获得某上级角色,必须先获得其下一级的角色
     * 参见 RBAC2 模型概念
     *
     * @return 先决条件角色
     */
    default List<Role> getPremise() {
        return Collections.emptyList();
    }

}
